#ifndef OPENCV_VERSION_H
#define OPENCV_VERSION_H

// 包含OpenCV核心头文件（其中定义了版本宏）
#include <opencv2/opencv.hpp>
// #include <opencv2/core.hpp>

// 利用OpenCV预定义的版本宏封装版本信息
#define OPENCV_MAJOR_VERSION CV_MAJOR_VERSION    // 主版本号（如4.x）
#define OPENCV_MINOR_VERSION CV_MINOR_VERSION    // 次版本号（如4.5）

// 组合成完整版本号（如40504表示4.5）
#define OPENCV_VERSION \
    (OPENCV_MAJOR_VERSION * 10000 + \
     OPENCV_MINOR_VERSION * 100)

// 版本检查宏（用于条件编译）
// 示例：OPENCV_VERSION_AT_LEAST(4, 5) 表示检查是否为4.5或更高版本
#define OPENCV_VERSION_AT_LEAST(major, minor) \
    (OPENCV_MAJOR_VERSION > major || \
     (OPENCV_MAJOR_VERSION == major && OPENCV_MINOR_VERSION > minor) || \
     (OPENCV_MAJOR_VERSION == major && OPENCV_MINOR_VERSION == minor))

// 打印OpenCV版本信息的函数
static void print_opencv_version() {
    printf("OpenCV 版本: %d.%d (内部版本号: %d)\n",
           OPENCV_MAJOR_VERSION,
           OPENCV_MINOR_VERSION,
           OPENCV_VERSION);
    
    // 示例：根据不同版本执行不同逻辑
    #if OPENCV_VERSION_AT_LEAST(4, 0)
        printf("支持OpenCV 4.x及以上特性\n");
    #elif OPENCV_VERSION_AT_LEAST(3, 0)
        printf("使用OpenCV 3.x兼容模式\n");
    #else
        printf("警告：OpenCV版本过低，可能存在兼容性问题\n");
    #endif
}


#if 0 // 带有修订版本
// 利用OpenCV预定义的版本宏封装版本信息
#define OPENCV_MAJOR_VERSION CV_MAJOR_VERSION    // 主版本号（如4.x.x中的4）
#define OPENCV_MINOR_VERSION CV_MINOR_VERSION    // 次版本号（如4.5.x中的5）
#define OPENCV_PATCH_VERSION CV_PATCH_VERSION    // 修订版本号（如4.5.4中的4）

// 组合成完整版本号（如40504表示4.5.4）
#define OPENCV_VERSION \
    (OPENCV_MAJOR_VERSION * 10000 + \
     OPENCV_MINOR_VERSION * 100 + \
     OPENCV_PATCH_VERSION)

// 版本检查宏（用于条件编译）
// 示例：OPENCV_VERSION_AT_LEAST(4, 5, 0) 表示检查是否为4.5.0或更高版本
#define OPENCV_VERSION_AT_LEAST(major, minor, patch) \
    (OPENCV_MAJOR_VERSION > major || \
     (OPENCV_MAJOR_VERSION == major && OPENCV_MINOR_VERSION > minor) || \
     (OPENCV_MAJOR_VERSION == major && OPENCV_MINOR_VERSION == minor && OPENCV_PATCH_VERSION >= patch))

// 打印OpenCV版本信息的函数
static void print_opencv_version() {
    printf("OpenCV 版本: %d.%d.%d (内部版本号: %d)\n",
           OPENCV_MAJOR_VERSION,
           OPENCV_MINOR_VERSION,
           OPENCV_PATCH_VERSION,
           OPENCV_VERSION);
    
    // 示例：根据不同版本执行不同逻辑
    #if OPENCV_VERSION_AT_LEAST(4, 0, 0)
        printf("支持OpenCV 4.x及以上特性\n");
    #elif OPENCV_VERSION_AT_LEAST(3, 0, 0)
        printf("使用OpenCV 3.x兼容模式\n");
    #else
        printf("警告：OpenCV版本过低，可能存在兼容性问题\n");
    #endif
}
#endif //if 0  // 带有修订版本

#endif // OPENCV_VERSION_H
